#!c:\Python27\python.exe

import cv2.cv as cv
import Imagenes as img
import AnalisisDePuntos as ap
import TraduccionTexto as tt
import sys
import FuncionesAuxiliares as fa
import loggear as lg

#lg.activarLog()

# Cargar Alfabetos Espaniol
alfabeto_minusculas = []
alfabeto_mayusculas = []
alfabeto_numeros = []
alfabeto_minusculas, alfabeto_mayusculas, alfabeto_numeros = tt.cargarAlfabetos('./alfMinEs.txt', './alfMayEs.txt' , './alfNumEs.txt')

# Imagen a Abrir
if len(sys.argv) == 3:
    texto = ''
    rutaImagen = sys.argv[1]
    rutaTxt = sys.argv[2]
    sensibilidad = 100.0
elif len(sys.argv) == 4:
    texto = ''
    rutaImagen = sys.argv[1]
    rutaTxt = sys.argv[2]
    if sys.argv[3] == 'B':
        sensibilidad = 50.0
    elif sys.argv[3] == 'M':
        sensibilidad = 50.0
    elif sys.argv[3] == 'A':
        sensibilidad = 100.0
    else:
        sensibilidad = 100.0
else:
    texto = 'se debe ejecutar como: \n\t\t'
    texto = texto + 'MotorDeReconocimiento.py Ruta+Imagen Ruta+Traduccion'
    fa.descargarPaginaTexto(texto, 'C:/dump.txt')

# ABRIR IMAGEN
try:
    imagen = cv.LoadImageM(rutaImagen)
    lg.loggear('imagenOriginal', imagen)
except:
    texto = 'No se pudo abrir la imagen ' + rutaImagen
    fa.descargarPaginaTexto(texto, rutaTxt)
imgGris = img.grisarImagen(imagen)
lg.loggear('imagenGris', imgGris)
cv.Dilate(imgGris, imgGris)
lg.loggear('imagenProcesada', imgGris)

# OBTENER SOMBRAS
(ui, us) = img.limitesHistograma(imgGris, 1)
imgOsc = img.umbralizar(imgGris, ui, 255)
lg.loggear('sombras', imgOsc)

# BUSCAR FRANJAS DE PUNTOS
umbral = fa.aplicarSensibilidad(100, 0, sensibilidad)
puntos = img.generarPuntos(imgOsc, umbral)
#puntos = img.generarPuntos(imgOsc, 50)
ptosGrandes = ap.armarImagen(puntos)
lg.loggear('ptosEncontrados', ptosGrandes)
puntos = img.generarPuntos(ptosGrandes, 0)
ptosGrandes = ap.armarImagen(puntos)
lg.loggear('ptosProcesados', ptosGrandes)
#angulo = 0
#radio = fa.aplicarSensibilidad(17, 13, sensibilidad)
radio = fa.aplicarSensibilidad(21, 13, sensibilidad)
franjaH, franjaV = ap.obtenerFranjas(puntos, radio)
#angulo = ap.calcAngProm(franjaH, puntos)
#puntosR = ap.rotarPuntos(puntos, angulo)
puntosR = puntos

imgTestAntes = ap.armarImagen(puntosR)
lg.loggear('ptosRotados', imgTestAntes)
if lg.hayLog():
    grillaH = ap.complementarFranjas(franjaH)
    grillaV = ap.complementarFranjas(franjaV)
    img.agregarFranjasH(imgTestAntes, grillaH)
    img.agregarFranjasV(imgTestAntes, grillaV)
    lg.loggear('grillaOriginal', imgTestAntes)

# OBTENER PUNTOS ----------------------------------------------------------
imgGris = img.grisarImagen(imagen)
cv.Dilate(imgGris, imgGris)
(ui, us) = img.limitesHistograma(imgGris, 1)
imgOsc = img.umbralizar(imgGris, ui, 255)
umbral = fa.aplicarSensibilidad(16, 0, sensibilidad)
puntos = img.generarPuntos(imgOsc, umbral)
#angulo = ap.calcAngProm(franjaH, puntos)
#puntosR = ap.rotarPuntos(puntos, angulo)
puntosR = puntos
if lg.hayLog():
    imgTestDps = ap.armarImagen(puntosR)
#    grillaH = ap.complementarFranjas(franjaH)
#    grillaV = ap.complementarFranjas(franjaV)
    img.agregarFranjasH(imgTestDps, grillaH)
    img.agregarFranjasV(imgTestDps, grillaV)
#    pto0 = ap.obtenerPtoInicial(puntosR)
#    cv.Circle(imgTestDps, pto0, 10, 128, 15)
    lg.loggear('grillaFinal', imgTestDps)

# Identificar Caracteres --------------------------------------------------

linea = 1
carac = 1
pagina = []
renglon = []

puntos = list(puntosR)

while linea <= len(franjaH) - 2:
    while carac <= len(franjaV) - 2:
        renglon.append(ap.leerCaracter(linea, carac, franjaH, franjaV, puntos))
        carac += 2
    pagina.append(list(renglon))
    renglon = []
    carac = 1
    linea += 3

lineaT = []
paginaT = []

flagMayuscula = 0
flagAdmiracion = 0
flagPregunta = 0
while pagina:
    lineaB = pagina.pop()
    lineaB.reverse()
    alfabeto = alfabeto_minusculas
    while lineaB:
        caracterB = lineaB.pop()
        caracterT, alfabeto, flagMayuscula, flagAdmiracion, flagPregunta = tt.convertirCaracter(caracterB, alfabeto, alfabeto_minusculas, alfabeto_mayusculas, alfabeto_numeros, flagMayuscula, flagAdmiracion, flagPregunta)
        lineaT.append(caracterT)
    paginaT.append(list(lineaT))
    lineaT = []
    cv.WaitKey()
fa.descargarPaginaTexto(paginaT, rutaTxt)






